import dict from './dict.js'

/**
 * 货币工具类 - 统一管理XIN货币单位
 */
export class CurrencyUtils {
  /**
   * 格式化XIN货币显示
   * @param {number} amount - 金额
   * @param {boolean} withSymbol - 是否显示货币符号
   * @returns {string} 格式化后的货币字符串
   */
  static formatXIN(amount, withSymbol = true) {
    if (typeof amount !== 'number') {
      amount = parseFloat(amount) || 0
    }
    const formattedAmount = amount.toLocaleString()
    return withSymbol ? `${formattedAmount}${dict.CURRENCY.SYMBOL.XIN}` : formattedAmount
  }

  /**
   * 格式化XIN豆货币显示
   * @param {number} amount - 金额
   * @param {boolean} withSymbol - 是否显示货币符号
   * @returns {string} 格式化后的货币字符串
   */
  static formatXINBean(amount, withSymbol = true) {
    if (typeof amount !== 'number') {
      amount = parseFloat(amount) || 0
    }
    const formattedAmount = amount.toLocaleString()
    return withSymbol ? `${formattedAmount}${dict.CURRENCY.SYMBOL.XIN_BEAN}` : formattedAmount
  }

  /**
   * 格式化徽章货币显示
   * @param {number} amount - 金额
   * @param {boolean} withSymbol - 是否显示货币符号
   * @returns {string} 格式化后的货币字符串
   */
  static formatBadge(amount, withSymbol = true) {
    if (typeof amount !== 'number') {
      amount = parseFloat(amount) || 0
    }
    const formattedAmount = amount.toLocaleString()
    return withSymbol ? `${formattedAmount}${dict.CURRENCY.SYMBOL.BADGE}` : formattedAmount
  }

  /**
   * 格式化货币类型1（XIN）显示
   * @param {number} amount - 金额
   * @param {boolean} withSymbol - 是否显示货币符号
   * @returns {string} 格式化后的货币字符串
   */
  static formatCurrency1(amount, withSymbol = true) {
    if (typeof amount !== 'number') {
      amount = parseFloat(amount) || 0
    }
    const formattedAmount = amount.toLocaleString()
    return withSymbol ? `${formattedAmount}${dict.CURRENCY.SYMBOL[1]}` : formattedAmount
  }

  /**
   * 格式化货币类型5（XING）显示
   * @param {number} amount - 金额
   * @param {boolean} withSymbol - 是否显示货币符号
   * @returns {string} 格式化后的货币字符串
   */
  static formatCurrency5(amount, withSymbol = true) {
    if (typeof amount !== 'number') {
      amount = parseFloat(amount) || 0
    }
    const formattedAmount = amount.toLocaleString()
    return withSymbol ? `${formattedAmount}${dict.CURRENCY.SYMBOL[5]}` : formattedAmount
  }

  /**
   * 格式化货币类型8（徽章）显示
   * @param {number} amount - 金额
   * @param {boolean} withSymbol - 是否显示货币符号
   * @returns {string} 格式化后的货币字符串
   */
  static formatCurrency8(amount, withSymbol = true) {
    if (typeof amount !== 'number') {
      amount = parseFloat(amount) || 0
    }
    const formattedAmount = amount.toLocaleString()
    return withSymbol ? `${formattedAmount}${dict.CURRENCY.SYMBOL[8]}` : formattedAmount
  }

  /**
   * 获取货币单位名称
   * @param {string} type - 货币类型 ('XIN' | 'XIN_BEAN')
   * @returns {string} 货币单位名称
   */
  static getCurrencyName(type) {
    return dict.CURRENCY[type] || ''
  }

  /**
   * 获取货币符号
   * @param {string} type - 货币类型 ('XIN' | 'XIN_BEAN')
   * @returns {string} 货币符号
   */
  static getCurrencySymbol(type) {
    return dict.CURRENCY.SYMBOL[type] || ''
  }

  /**
   * 根据货币类型格式化显示
   * @param {number} amount - 金额
   * @param {number|string} currencyType - 货币类型（1=XIN, 5=XING, 8=徽章）
   * @param {boolean} withSymbol - 是否显示货币符号
   * @returns {string} 格式化后的货币字符串
   */
  static formatCurrencyByType(amount, currencyType, withSymbol = true) {
    if (typeof amount !== 'number') {
      amount = parseFloat(amount) || 0
    }
    
    const formattedAmount = amount.toLocaleString()
    
    switch (parseInt(currencyType)) {
      case 1:
        return withSymbol ? `${formattedAmount}${dict.CURRENCY.SYMBOL[1]}` : formattedAmount
      case 5:
        return withSymbol ? `${formattedAmount}${dict.CURRENCY.SYMBOL[5]}` : formattedAmount
      case 8:
        return withSymbol ? `${formattedAmount}${dict.CURRENCY.SYMBOL[8]}` : formattedAmount
      default:
        return withSymbol ? `${formattedAmount}${this.getCurrencySymbol(currencyType)}` : formattedAmount
    }
  }

  /**
   * 智能格式化价格显示（带万位简化）
   * @param {number} price - 价格
   * @param {string} currencyType - 货币类型
   * @param {boolean} showSymbol - 是否显示符号
   * @returns {string} 格式化后的价格字符串
   */
  static formatPriceDisplay(price, currencyType = 'XIN_BEAN', showSymbol = true) {
    if (typeof price !== 'number') {
      price = parseFloat(price) || 0
    }

    let priceStr = ''
    if (price >= 10000) {
      const wPrice = (price / 10000).toFixed(1)
      const wPriceStr = wPrice.endsWith('.0') ? wPrice.slice(0, -2) : wPrice
      priceStr = showSymbol ? `${wPriceStr}w${this.getCurrencySymbol(currencyType)}` : `${wPriceStr}w`
    } else {
      priceStr = showSymbol ? `${price}${this.getCurrencySymbol(currencyType)}` : `${price}`
    }
    
    return priceStr
  }
}

// 导出常用的格式化函数
export const formatXIN = CurrencyUtils.formatXIN
export const formatXINBean = CurrencyUtils.formatXINBean
export const formatBadge = CurrencyUtils.formatBadge
export const formatCurrency1 = CurrencyUtils.formatCurrency1
export const formatCurrency5 = CurrencyUtils.formatCurrency5
export const formatCurrency8 = CurrencyUtils.formatCurrency8
export const formatCurrencyByType = CurrencyUtils.formatCurrencyByType
export const formatPriceDisplay = CurrencyUtils.formatPriceDisplay

// 导出货币常量
export const CURRENCY = dict.CURRENCY

export default CurrencyUtils